# coding:utf-8

from django import forms
from django.contrib.auth.models import User 	 #puede que estos no se usen
from django.contrib.auth import authenticate 	 #puede que estos no se usen
from django.forms import ModelForm
import vleApp.models as models

#This is a "dummy" form for our feedback filling
class EditFeedbackForm(forms.Form):
    CATEGORY_CHOICES = (('quiz', 'Quiz'),('SessionTime', 'Tiempo de uso del sistema'),('PostGrade','Calificacion de comentarios'))
    comment1 = forms.CharField(widget=forms.Textarea(attrs={'rows':'3','cols':'50'}), label = 'Comentario', required=True)
    category1 = forms.CharField(widget=forms.Select(choices=CATEGORY_CHOICES), label="Categoria")
    minGrade1 = forms.IntegerField(label="Calificacion minima", help_text="Calificacion minima para recibir el comentario")
    #hourAverage1 = forms.IntegerField(widget=forms.Textarea(attrs={'rows':'1','cols':'20'}), label = 'HoraPromedio', required=False)
    
    def clean_feedback1(self):
        feedback = str(self.cleaned_data.get('comment1', ''))
        if not feedback:
            raise forms.ValidationError("Campo requerido.")
        return feedback
    def clean_feedback2(self):
        feedback = str(self.cleaned_data.get('category1', ''))
        if not feedback:
            raise forms.ValidationError("Campo requerido.")
        return feedback
    def clean_feedback2(self):
        feedback = str(self.cleaned_data.get('minGrade1', ''))
        if not feedback:
            raise forms.ValidationError("Campo requerido.")
        return feedback

   # def clean_hourAverage1(self):
    #    intFeed = int(str(self.cleaned_data.get('hourAverage', '')))
    #    print "hola " + intFeed
    #    if intFeed < 0:
    #        raise forms.ValidationError("Debe ser un valor entre 0 y 100")
    #    if intFeed > 100:
    #        raise forms.ValidationError("Debe ser un valor entre 0 y 100")
    #    if not feedback:
    #        raise forms.ValidationError("Campo requerido.")
    #    return feedback

class UploadSyllabusForm(forms.Form):
    fileName=forms.FileField(label='Archivo con temario', help_text="Debe ser un archivo .xls Si tiene duda del formato, descargue el ejemplo")

class UploadVideoForm(ModelForm):
    fileName = forms.FileField(label='Archivo de video', help_text="Se aceptan .avi y .flv")

    class Meta:
        model = models.Video
        fields= ['title','description','protected','allGroups']

class UploadFileForm(ModelForm):
    fileName = forms.FileField(label='Seleccione el archivo para subir')
    
    class Meta:
        model = models.File
        fields= ['title','description','allGroups']

class LoginForm(forms.Form):
    user = forms.CharField(label = 'Usuario',required=False,
            widget=forms.TextInput(attrs={'rows':'1','cols':'50'}))
    password = forms.CharField(label = 'Contraseña', required=False, widget=forms.PasswordInput(attrs={'rows':'1','cols':'50'}))
    
    def clean_user(self):
        cleanUser=self.cleaned_data.get('user','')
        userLogin=unicode(cleanUser).encode('utf-8')
        if not User.objects.filter(username=userLogin):
            raise forms.ValidationError("No estas registrado en el sistema")
        return userLogin
    
    def clean_password(self):
        userLogin = str(self.cleaned_data.get('user', ''))
        cleanPass=self.cleaned_data.get('password', '')
        passwordLogin = unicode(cleanPass).encode('utf-8')
        if not authenticate(username=userLogin, password=passwordLogin):
            raise forms.ValidationError("Contraseña incorecta para el usuario:")
        return passwordLogin
	
#------------------------------Temporal Form--------------------

class RegisterForm(forms.Form):
    StName = forms.CharField(label = 'Escriba el nombre de estudiante',required=True,
            widget=forms.TextInput(attrs={
        'rows':'1',
        'cols':'50'
        }))

    LtName = forms.CharField(label = 'Escriba los apellidos de estudiante',required=False,
            widget=forms.TextInput(attrs={
        'rows':'1',
        'cols':'50'
        }))
    username = forms.CharField(label = 'Escriba el login',required=False,
            widget=forms.TextInput(attrs={
        'rows':'1',
        'cols':'50'
        }))
    email = forms.EmailField(label = 'Escriba el email del estudiante',required=False,
            widget=forms.TextInput(attrs={
        'rows':'1',
        'cols':'50'
        }))

class TeacherRegistrationForm(ModelForm):
    password = forms.CharField(label = 'Contraseña',required=True, widget=forms.PasswordInput(attrs={'rows':'1','cols':'50'}))
    password2 = forms.CharField(label='Repita su contraseña',help_text="(Debe coincidir).", required=True, widget=forms.PasswordInput(attrs={'rows':'1','cols':'50'}))
    avatarFileName = forms.ImageField(label='Foto', required=False)

    def clean_username(self):
        userName=self.cleaned_data.get('username','')
        if User.objects.filter(username=userName):
            raise forms.ValidationError("Este login no está disponible.")
        else:
            return userName

    def clean_password2(self):
        password=self.cleaned_data.get('password','')
        password2=self.cleaned_data.get('password2','')
        
        if not password==password2:
            raise forms.ValidationError("Debe escribir la misma contraseña.")
        else:
            return password2

    class Meta:
        model = models.Teacher
        fields = ["username","first_name","last_name","email","password"]

class EditStudentForm(ModelForm):
    messenger=forms.CharField(label = 'Mensajero instantáneo',required=False)
    skype=forms.CharField(label = 'Usuario de Skype',required=False)
    twitter=forms.CharField(label = 'Usuario de Twitter', help_text="Escriba su usuario sin @",required=False)
    avatarFileName = forms.ImageField(label='Foto', help_text="Para cambiar su foto, suba una imagen", required=False)

    class Meta:
        model = models.Teacher
        fields = ["avatarFileName","first_name","last_name","email","phone_number","messenger","skype","twitter"]

class EditTeacherForm(ModelForm):
    location=forms.CharField(widget=forms.Textarea(attrs={'rows':'3','cols':'23'}), label = 'Ubicación física',required=False)
    messenger=forms.CharField(label = 'Mensajero instantáneo',required=False)
    skype=forms.CharField(label = 'Usuario de Skype',required=False)
    avatarFileName = forms.ImageField(label='Foto', help_text="Para cambiar su foto, suba una imagen", required=False)

    class Meta:
        model = models.Teacher
        fields = ["avatarFileName","first_name","last_name","email",'location',"phone_number","messenger","skype","homepage"]

class GroupExcelForm(forms.Form):
    courseKey=forms.CharField(label='Código de la materia',max_length=15, required=True)
    courseName=forms.CharField(label='Nombre de la materia',max_length=50, required=True)
    groupKey = forms.CharField(label='Código del grupo',max_length=15, required=True)
    fileName = forms.FileField(label='Archivo excel',help_text="Archivo .xls con los alumnos inscritos en este curso")

class EditGroupForm(forms.Form):
    fileName= forms.FileField()

class ThreadCreationForm(ModelForm):

    def clean_title(self):
        newTitle=self.cleaned_data.get('title','')
        if models.Thread.objects.filter(title=newTitle) or not newTitle:
            raise forms.ValidationError("Ese tema ya existe.")
        return newTitle
    
    class Meta:
        model = models.Thread
        fields= ["title","description"]

class PostCreationForm(ModelForm):
    content=forms.CharField(widget=forms.Textarea(attrs={'rows':'20','cols':'100'}), label = 'Contenido',required=True)

    def clean_title(self):
        newTitle=self.cleaned_data.get('title','')
        if models.Post.objects.filter(title=newTitle) or not newTitle:
            raise forms.ValidationError("Ese título ya existe.")
        return newTitle
    
    class Meta:
        model = models.Post
        fields= ['title','content']

class NewsCreationForm(ModelForm):

    class Meta:
        model = models.News
        fields = ['title','content','groups']

class RegisterGradesFileForm(forms.Form):
    fileName=forms.FileField(label='Archivo con calificaciones', help_text="Debe ser un archivo .xls")

    class Meta:
        model = models.Teacher
        fields = ["fileName"]

class UploadGradesForm(forms.Form):
    fileGrade = forms.FileField(label='Archivo de calificaciones', help_text="Debe ser un archivo .xls")



class SendHomeworkForm(ModelForm):
    text = forms.CharField(widget=forms.Textarea(attrs={'rows':'3','cols':'50'}), label = 'Mensaje')
    file = forms.FileField(label='Archivo adjunto', help_text="Si son varios, enviar en un .zip")

    class Meta:
        model = models.Homework
        fields = ['subjects', 'text','file']

class SubjectsForm(forms.Form):
    subject = forms.CharField(label = 'Asunto', help_text = "Nuevo asunto para las tareas enviadas", max_length = 100, required = True)


class PreferencesForm(ModelForm):
    CATEGORY_CHOICES = (('Sun', 'Domingo'),('Mon', 'Lunes'),('Tue', 'Martes'),('Wed', 'Miercoles'),('Thu', 'Jueves'),('Fri', 'Viernes'),('Sat', 'Sabado'))
    avgHour=forms.CharField(label = 'Horas promedio en sesion', help_text="Horas que el alumno debe tener en línea para su evaluacion", required=True)
    metricDay = forms.IntegerField(label = 'periodo días de revision', help_text="Ejemplo: 8 (cada 8 días hay revisiones) del sistema")
    startDay = forms.CharField(widget=forms.Select(choices=CATEGORY_CHOICES), label="Día de comienzo")

    class Meta:
        model = models.Teacher
        fields= ['avgHour','metricDay']